/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package insat.ia.main;

import java.util.ArrayList;


public abstract class InferenceEngine {

 
    // le moteur de donnees
    Dataengine dataengine;
    // le but 
    String But;

    // variables de stat
    boolean butAttient = false;
    Integer nbReglesAppliquee = 0;
    

    /*
     * resolution de conflit selon l'ordre da'pparition
     */
    public Regle conflictResolution(ArrayList<Regle> reglesDeclenchableSet) {

        return reglesDeclenchableSet.get(0);
    }

    /*
     * retourne l'ensemble de regles declenchables
     */
  
    abstract public ArrayList<String> appliqueRegle(Regle r);
    
    public boolean match(Premisse premisse, ArrayList<Fait> bfobjects) {

//        System.out.println("Comparaisson de " + premisse.toString() + " AVEC "
//                + bfobjects.toString());
        if (bfobjects.size() == 0) {
            return false;
        }
        int i = 0;

        for (int k = 0; k < premisse.size(); k++) {

            for (int k2 = 0; k2 < bfobjects.size(); k2++) {

//                System.out.println("--" + premisse.get(k) + "#"
//                        + bfobjects.get(k2));
                if (premisse.get(k).equals(bfobjects.get(k2).getFait())) {
                    i++;
                }

            }
        }

        if (i == premisse.size()) {
        //    System.out.println("MATCHHHH!!");
            return true;
        } else {
            return false;
        }
    }

    public boolean isButAttient() {
        return butAttient;
    }

    public void setButAttient(boolean butAttient) {
        this.butAttient = butAttient;
    }

    public Integer getNbReglesAppliquee() {
        return nbReglesAppliquee;
    }

    public void setNbReglesAppliquee(Integer nbReglesAppliquee) {
        this.nbReglesAppliquee = nbReglesAppliquee;
    }

}
